#ifndef _AP3216_DRV_H_
#define _AP3216_DRV_H_
#include "gd32f30x.h"
#include <stdio.h>
#include "i2c_soft_drv.h"
#include "dwt_delay.h"
#include <stdbool.h>

// 设备地址
#define AP3216C_ADDR          0X1E

/* AP3316C寄存器 */
#define AP3216C_SYSTEMCONG    0x00    /* 配置寄存器       */
#define AP3216C_INTSTATUS     0X01    /* 中断状态寄存器   */
#define AP3216C_INTCLEAR      0X02    /* 中断清除寄存器   */
#define AP3216C_IRDATALOW     0x0A    /* IR数据低字节     */
#define AP3216C_IRDATAHIGH    0x0B    /* IR数据高字节     */
#define AP3216C_ALSDATALOW    0x0C    /* ALS数据低字节    */
#define AP3216C_ALSDATAHIGH   0X0D    /* ALS数据高字节    */
#define AP3216C_PSDATALOW     0X0E    /* PS数据低字节     */
#define AP3216C_PSDATAHIGH    0X0F    /* PS数据高字节     */

// I2C
#define AP_I2C_INIT()                     I2cSoftDrvInit()
#define AP_I2C_WRITE(addr,reg,data,len)   I2cSoftWrite(addr,reg, data, len)
#define AP_I2C_READ(addr,reg,data,len)    I2cSoftRead( addr,reg, data, len)



/**
 * @desc  : ap3216c初始化
 * @date  : 2025-09-30
 * @author: AnRui
 * @note  :
 *       000：掉电模式（默认状态），传感器不工作，功耗最低。
 *       001：仅环境光（ALS）功能使能，传感器只进行环境光强度的检测。
 *       010：接近（PS） + 红外（IR）功能使能，传感器可进行接近测距和红外相关检测。
 *       011：环境光（ALS）以及接近（PS） + 红外（IR）功能同时使能，传感器同时开展这几类检测。
 *       100：软件复位，用于对传感器进行软件层面的重置操作。
 *       101：环境光（ALS）功能单次运行，即只执行一次环境光检测后回到相应状态。
 *       110：接近（PS） + 红外（IR）功能单次运行，只执行一次接近和红外检测。
 *       111：环境光（ALS）以及接近（PS） + 红外（IR）功能单次运行，同时执行一次这几类检测。
 */
bool ap3216c_init(void);



/**
 * @desc  : 读取光强数据
 * @date  : 2025-09-30
 * @author: AnRui
 * @param : ap_als_value - {参数说明}:
 * @return: int 小于0 代表失败
 * @note  : 需要注意的是：读取间隔至少要大于 112.5ms，因为， AP3216C 内部完成一次ALS+PS+IR 的数据转换，需要 112.5ms 的时间
 */
int ap3216c_get_als(void);
#endif
